<?php
require_once( ROOT_DATA_ACCESS_OBJECT . 'DataAccessObject.class.php');
require_once( ROOT_DATA_OBJECT . 'DataObject.class.php');

class MovimentoCaixaBO extends DataAccessObject {
	
	function listarMovimentosCaixa($instanceDB, $limit, $start, $codigoProjeto, $codigoDotacao, $dataInicio, $dataFim){
		
		$sqlQuery = "SELECT ";
		$sqlQuery .= "a.codigo, a.descricao, a.numeroNota, a.tipo, a.valorOperacao, a.especie, a.tipoPessoa, dataMovimentacao, ";
		$sqlQuery .= "b.codigo as Pessoa_codigo, b.nome as Pessoa_nome, "; 
		$sqlQuery .= "c.codigo as Atividade_codigo, c.titulo as Atividade_nome, "; 
		$sqlQuery .= "d.codigo as Dotacao_codigo, d.nome as Dotacao_nome, "; 
		$sqlQuery .= "e.codigo as Projeto_codigo, e.nome as Projeto_nome ";
		$sqlQuery .= "FROM MovimentoCaixa a ";
		$sqlQuery .= "LEFT JOIN Pessoa b ON a.Pessoa_codigo = b.codigo ";
		$sqlQuery .= "LEFT JOIN Atividade c ON a.Atividade_codigo = c.codigo ";
		$sqlQuery .= "JOIN Dotacao d ON a.Dotacao_codigo = d.codigo ";
		$sqlQuery .= "JOIN Projeto e ON e.codigo = d.Projeto_codigo ";
		
		if($codigoProjeto != ""){
			$sqlQuery .= "AND d.Projeto_codigo = ". $codigoProjeto ." ";
		}
		
		if($codigoDotacao != ""){
			$sqlQuery .= "AND d.codigo = ". $codigoDotacao ." ";
		}		
		
		if($dataInicio != "" &&  $dataFim != ""){
			$sqlQuery .= "WHERE a.dataMovimentacao >= '" .$dataInicio. "' AND ";
			$sqlQuery .= "a.dataMovimentacao <= '" .$dataFim. "' ";
		}
		
		$quantidadeRegistros = $this->quantidadeRegistros($instanceDB, $sqlQuery);
		$listMovimentosCaixaAll = $this->execute( $instanceDB, $sqlQuery, "SELECT" );
		
		$sqlQuery .= "ORDER BY a.dataMovimentacao ASC ";
		
		if($limit != "" && $start != ""){
			$sqlQuery .= "LIMIT ".$start.",".$limit." ";
		}

		
		
		$listMovimentosCaixa = $this->execute( $instanceDB, $sqlQuery, "SELECT" );
		
		$result = array("object" => $listMovimentosCaixa, "all" => $listMovimentosCaixaAll, "qtdRegistros" => $quantidadeRegistros);
		
		return $result;
	
	}
	
	function quantidadeRegistros($instanceDB, $sqlQuery){
		$qtdRegistros = $this->execute( $instanceDB, $sqlQuery, "SELECT" );
		return count($qtdRegistros);
	}
	
	function capturarMovimentoCaixa($instanceDB, $codigoMovimentoCaixa){
		
		$sqlQuery = "SELECT ";
		$sqlQuery .= "a.codigo, a.descricao, a.numeroNota, a.tipo, a.valorOperacao, a.especie, a.tipoPessoa, dataMovimentacao, ";
		$sqlQuery .= "b.codigo as Pessoa_codigo, b.nome as Pessoa_nome, "; 
		$sqlQuery .= "c.codigo as Atividade_codigo, c.titulo as Atividade_nome, "; 
		$sqlQuery .= "d.codigo as Dotacao_codigo, d.nome as Dotacao_nome, "; 
		$sqlQuery .= "e.codigo as Projeto_codigo, e.nome as Projeto_nome ";
		$sqlQuery .= "FROM MovimentoCaixa a ";
		$sqlQuery .= "LEFT JOIN Pessoa b ON a.Pessoa_codigo = b.codigo ";
		$sqlQuery .= "LEFT JOIN Atividade c ON a.Atividade_codigo = c.codigo ";
		$sqlQuery .= "JOIN Dotacao d ON a.Dotacao_codigo = d.codigo ";
		$sqlQuery .= "JOIN Projeto e ON e.codigo = d.Projeto_codigo AND ";
		$sqlQuery .= "a.codigo = " .$codigoMovimentoCaixa;
		
		return $this->execute( $instanceDB, $sqlQuery, "SELECT" );
	
	}
	
	function verificaSaldo($instanceDB, $dataObject){
		
		$DotacaoBO = new DotacaoBO();
		$aux += $DotacaoBO->calculaSaldoDotacao($intanceDB, $codigoDotacao);
		

		return $aux;		
	}	
	
	/*
	 * @description: Recebe código do projeto e lista as movimentações desse projeto
	 * @author: Leandro Gimenez
	 * @params: $codigoProjeto(código do projeto)
	 * @return: lista com todas as movimentações do projeto
	*/	
	function listarMovimentacoesPorProjeto($instanceDB, $codigoProjeto, $limit, $start){
		$sqlQuery = "SELECT ";
		$sqlQuery .= "a.codigo, a.descricao, a.numeroNota, a.tipo, a.valorOperacao, a.especie, a.tipoPessoa, dataMovimentacao, ";
		$sqlQuery .= "b.codigo as Pessoa_codigo, b.nome as Pessoa_nome, "; 
		$sqlQuery .= "c.codigo as Atividade_codigo, c.titulo as Atividade_nome, "; 
		$sqlQuery .= "d.codigo as Dotacao_codigo, d.nome as Dotacao_nome, "; 
		$sqlQuery .= "e.codigo as Projeto_codigo, e.nome as Projeto_nome ";
		$sqlQuery .= "FROM MovimentoCaixa a ";
		$sqlQuery .= "LEFT JOIN Pessoa b ON a.Pessoa_codigo = b.codigo ";
		$sqlQuery .= "LEFT JOIN Atividade c ON a.Atividade_codigo = c.codigo ";
		$sqlQuery .= "JOIN Dotacao d ON a.Dotacao_codigo = d.codigo ";
		$sqlQuery .= "JOIN Projeto e ON e.codigo = d.Projeto_codigo AND ";
		$sqlQuery .= "d.Projeto_codigo = ". $codigoProjeto. " ";	
				
		
		$quantidadeRegistros = $this->quantidadeRegistros($instanceDB, $sqlQuery);
		$listMovimentosCaixaAll = $this->execute( $instanceDB, $sqlQuery, "SELECT" );
		
		// Controle da paginação
		if($limit != "" && $start != ""){
			$sqlQuery .= "LIMIT ".$start.",".$limit." ";
		}
				
		$listMovimentosCaixa = $this->execute( $instanceDB, $sqlQuery, "SELECT" );
		
		$result = array("object" => $listMovimentosCaixa, "all" => $listMovimentosCaixaAll, "qtdRegistros" => $quantidadeRegistros);
		
		return $result;
		
		
	}

	/*
	 * @description: Recebe período de datas (ex: 10/02/2011 a 15/07/2011) e retorna as movimentações nesse período
	 * @author: Leandro Gimenez
	 * @params: $dataInicio e $dataFim (intervalo de datas para delimitar o período)
	 * @return: lista com todas as movimentações no período indicado
	*/
	function listarMovimentacoesPorPeriodo($instanceDB, $dataInicio, $dataFim){
		$sqlQuery = "SELECT ";
		$sqlQuery .= "a.codigo, a.descricao, a.numeroNota, a.tipo, a.valorOperacao, a.especie, a.tipoPessoa, dataMovimentacao, ";
		$sqlQuery .= "b.codigo as Pessoa_codigo, b.nome as Pessoa_nome, "; 
		$sqlQuery .= "c.codigo as Atividade_codigo, c.titulo as Atividade_nome, "; 
		$sqlQuery .= "d.codigo as Dotacao_codigo, d.nome as Dotacao_nome, "; 
		$sqlQuery .= "e.codigo as Projeto_codigo, e.nome as Projeto_nome ";
		$sqlQuery .= "FROM MovimentoCaixa a ";
		$sqlQuery .= "LEFT JOIN Pessoa b ON a.Pessoa_codigo = b.codigo ";
		$sqlQuery .= "LEFT JOIN Atividade c ON a.Atividade_codigo = c.codigo ";
		$sqlQuery .= "JOIN Dotacao d ON a.Dotacao_codigo = d.codigo ";
		$sqlQuery .= "JOIN Projeto e ON e.codigo = d.Projeto_codigo WHERE ";
		$sqlQuery .= "a.dataMovimentacao >= '" .$dataInicio. "' AND ";
		$sqlQuery .= "a.dataMovimentacao <= '" .$dataFim. "'";
		//echo $sqlQuery;
		return $this->execute( $instanceDB, $sqlQuery, "SELECT" );		
	}
	
	function inserir( $instanceDB, $dataObject ){
		$codigo = ($this->getMax( $instanceDB, $dataObject->table, "codigo" )+1);
		$dataObject->set("codigo", $codigo);
			$resultado = $this->insert( $instanceDB, $dataObject );
		if ( $resultado ){
			return $this->capturarMovimentoCaixa( $instanceDB, $dataObject->get("codigo") );
		}
		return FALSE;
	}
	
	
	function validaManipulacao( $instanceDB, $codigoAtividade ){
		$sqlQuery = "Select COUNT(*) AS result FROM MovimentoCaixa WHERE Atividade_codigo = ". $codigoAtividade;
		return $this->execute( $instanceDB, $sqlQuery, "SELECT" );
	}
	
	
	
	function alterar( $instanceDB, $dataObject ){
		return $resultado = $this->update( $instanceDB, $dataObject );
	}
	
	function excluir( $instanceDB, $dataObject ){
		return $this->delete( $instanceDB, $dataObject );
	}
		
	
}
?>
